import axios from "axios";
import config from "../config";
import { ElMessage } from "element-plus";

const NETWORK_ERROR = "网络请求异常，请稍后重试"

//创建一个axios实例对象
const service = axios.create({
    baseURL: config.baseApi
})

//在请求之前做一些事情
service.interceptors.request.use(req => {
    //可以自定义header
    //jwt token认证
    return req
})

//在请求之后做一些事情
service.interceptors.response.use(res => {
    //解构数据
    const { code, data, message } = res.data;
    //与后端协商而定
    if (code == 200) {
        return data;
    } else {
        //网络请求错误
        ElMessage.error(message || NETWORK_ERROR)
        return Promise.reject(message || NETWORK_ERROR)
    }
})

// 封装的核心函数
function request(options) {
    options.method = options.method || 'get'
    if (options.method.toLowerCase() == 'get') {
        options.params = options.data
    }
    //对mock的处理
    let isMock = config.mock
    if (typeof options.mock !== 'undefined') {
        isMock = options.mock
    }

    //对线上环境进行处理
    if (config.env == 'prod') {
        //如果是线上环境，就不给用到mock的机会
        service.defaults.baseURL = config.baseApi;
    } else {
        service.defaults.baseURL = isMock ? config.mockApi : config.baseApi
    }

    return service(options);
}

export default request;